<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
</head>
<body>

</body>
<script>
    // 在JavaScript中，`call`、`apply`和`bind`是`Function`对象自带的三个方法。
    // function fn(){
    //     console.log(this);
    // }
    // fn.call();// window
    // fn.call(undefined);// window
    // fn.call(null);// window
    // fn.call(1);// 包装对象
    // fn.call("abc");// 包装对象
    // fn.call(true);// 包装对象
    // fn.call({a:1,b:2});// {a:1,b:2}
    // fn.call([1,2,3]);// [1,2,3]
    // fn.call(function(){});// function(){}


    // 严格模式
    // function fn(){
    //     "use strict";
    //     console.log(this);
    // }
    // fn.call();// undefined
    // fn.call(undefined);// undefined
    // fn.call(null);// null
    // fn.call(1);// 1
    // fn.call("abc");// abc
    // fn.call(true);// true
    // fn.call({a:1,b:2});// {a:1,b:2}
    // fn.call([1,2,3]);// [1,2,3]
    // fn.call(function(){});// function(){}

    // console.log(fn.__proto__ === Function.prototype);// true

    // {
    //     // bind可以绑定this
    //     // bind
    //     // function fn(){
    //     //     console.log(this);
    //     // }
    //     // fn.bind({a:1})();// {a:1}
    //     // fn.bind()();// window
    //     // fn.bind(undefined)();// window
    //     // fn.bind(null)();// window
    //     // fn.bind([1,2,3])();// [1,2,3]
    //     // fn.bind(1)();//包装对象
    //
    //     // bind可以绑定this,也可以绑定参数
    //     // function fn(){
    //     //     console.log(this)
    //     // }
    //     // // fn.bind({a:1})();
    //     // const fn2 = fn.bind({a:1});
    //     // fn2();// {a:1}
    //     // fn2();// {a:1}
    //     // fn2();// {a:1}
    //     // fn2();// {a:1}
    //
    //     function fn(a,b,c,d){
    //         console.log(this,a,b,c,d)
    //     }
    //     // const fn2 = fn.bind({a:1});
    //     // fn2(1,2,3,4)
    //
    //     const fn3 = fn.bind(null);
    //     fn3(30,40);
    // }


    {
        function fn(a,b,c,d){
            console.log(a,b,c,d);
        }
        fn.call(undefined,1,2,3,4);
        fn.apply(undefined,[1,2,3,4]);
    }
</script>
</html>